package com.corder.display.validator;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;

import com.corder.display.dao.User;
import com.corder.display.util.Constant;
import com.jfinal.core.Controller;
import com.jfinal.validate.Validator;

/**
 * 该类主要用于验证用户的登陆信息是否过期，如果没有过期，就初始化用户的登陆信息，如果过期了，就返回登陆界面 
 */
public class LoginStatusValidator extends Validator {

	@Override
	protected void validate(Controller c) {
		// TODO Auto-generated method stub
		String loginToken = c.getCookie("loginToken");
		String ip = c.getRequest().getLocalAddr();
		//根据ip和token去获取用户信息
		List<User> list = User.dao.searchUserByTokenAndIp(loginToken, ip);
		if(list.size()==1){
			//如果用户信息存在，则验证该用户的登陆信息是否有效
			Long lastModifyTime = list.get(0).getLong("lastModifyTime");
			if ((System.currentTimeMillis() - lastModifyTime)/1000 > Constant.LOGIN_MISSING_TIME) {
				list.get(0).set("loginToken", "").set("ip", "").set("lastModifyTime", 9999999999999l).update();
				addError(Constant.LOGIN_ALTER_MSG, "登陆超时，请重新登陆！");
			} else {
				User.dao.resetLoginStatus(list.get(0));
			}
		} else {
			addError(Constant.LOGIN_ALTER_MSG, "系统发生异常，请重新登陆！");
		}
	}

	@Override
	protected void handleError(Controller c) {
		// TODO Auto-generated method stub
		try {
			c.setCookie(Constant.LOGIN_ALTER_MSG,
					URLEncoder.encode("系统发生异常，请重新登陆！", "utf-8"), 5 * 60 * 1000);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			c.redirect("/back");
		}
		c.setAttr("path", c.getRequest().getContextPath());
		c.render("/WEB-INF/view/back/index.html");
	}

}
